//package vip.xiaonuo.biz.core.utils;
//
//import cn.hutool.core.convert.Convert;
//import cn.hutool.core.img.ImgUtil;
//import cn.hutool.core.io.FileUtil;
//import cn.hutool.core.util.NumberUtil;
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.toolkit.IdWorker;
//import org.springframework.web.multipart.MultipartFile;
//import vip.xiaonuo.common.exception.CommonException;
//
//import java.math.BigDecimal;
//
//public class MinIOUtils {
//    public String storageFileWithReturnUrlMinio(MultipartFile file) {
//        return uploadReturnUrl("MINIO", file);
//    }
//    public String uploadReturnUrl(String engine, MultipartFile file){
//
//        // 生成id
//        String fileId = IdWorker.getIdStr();
//
//        // 存储桶名称
//        String bucketName;
//
//        // 定义存储的url，本地文件返回文件实际路径，其他引擎返回网络地址
//        String storageUrl;
//
//        // 使用MINIO默认配置的bucketName
//        bucketName = DevFileMinIoUtil.getDefaultBucketName();
//        storageUrl = DevFileMinIoUtil.storageFileWithReturnUrl(bucketName, genFileKey(fileId, file), file);
//
//        // 将文件信息保存到数据库
//        DevFile devFile = new DevFile();
//
//        // 设置文件id
//        devFile.setId(fileId);
//
//        // 设置存储引擎类型
//        devFile.setEngine(engine);
//        devFile.setBucket(bucketName);
//        devFile.setName(file.getOriginalFilename());
//        String suffix = ObjectUtil.isNotEmpty(file.getOriginalFilename())? StrUtil.subAfter(file.getOriginalFilename(),
//                StrUtil.DOT, true):null;
//        devFile.setSuffix(suffix);
//        devFile.setSizeKb(Convert.toStr(NumberUtil.div(new BigDecimal(file.getSize()), BigDecimal.valueOf(1024))
//                .setScale(0, BigDecimal.ROUND_HALF_UP)));
//        devFile.setSizeInfo(FileUtil.readableFileSize(file.getSize()));
//        devFile.setObjName(ObjectUtil.isNotEmpty(devFile.getSuffix())?fileId + StrUtil.DOT + devFile.getSuffix():null);
//        // 如果是图片，则压缩生成缩略图
//        if(ObjectUtil.isNotEmpty(suffix)) {
//            if(isPic(suffix)) {
//                try {
//                    devFile.setThumbnail(ImgUtil.toBase64DataUri(ImgUtil.scale(ImgUtil.toImage(file.getBytes()),
//                            100, 100, null), suffix));
//                } catch (Exception ignored) {
//                }
//            }
//        }
//        // 存储路径
//        devFile.setStoragePath(storageUrl);
//
//        // 定义下载地址
//        String downloadUrl;
//
//        // 下载路径，注意：本地文件下载地址设置为下载接口地址 + 文件id
//        if(engine.equals(DevFileEngineTypeEnum.LOCAL.getValue())) {
//            String apiUrl = commonProperties.getFileUrl();
//            if(ObjectUtil.isEmpty(apiUrl)) {
//                throw new CommonException("后端域名地址未正确配置：snowy.config.common.file-url为空");
//            }
//            downloadUrl= apiUrl + "/dev/file/download?id=" + fileId;
//            devFile.setDownloadPath(downloadUrl);
//        } else {
//            // 阿里云、腾讯云、MINIO可以直接使用存储地址（公网）作为下载地址
//            downloadUrl= storageUrl;
//            devFile.setDownloadPath(devFile.getStoragePath());
//        }
//
//        this.save(devFile);
//
//        // 如果是返回id则返回文件id
//        if(returnFileId) {
//            return fileId;
//        } else {
//            // 否则返回下载地址
//            return downloadUrl;
//        }
//    }
//}
